package com.itx.gatewayx.utils;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.PostConstruct;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.stream.Collectors;

/**
 * 数据库迁移工具类
 */
@Slf4j
@Component
public class DatabaseMigrationUtil {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    /**
     * 应用启动时执行SQL脚本
     */
    @PostConstruct
    @Transactional(rollbackFor = Exception.class)
    public void executeMigrationScripts() {
        try {
            // 直接修改content字段为可为空
            updateNewsContentColumn();
            // 不执行SQL脚本，避免SQL注入问题
            // executeSqlScript("db/add_uniquekey_to_news.sql");
            log.info("数据库迁移脚本执行成功");
        } catch (Exception e) {
            log.error("执行数据库迁移脚本失败", e);
        }
    }
    
    /**
     * 更新News表的content字段，设置为可为空
     */
    private void updateNewsContentColumn() {
        try {
            // 检查表是否存在
            boolean tableExists = jdbcTemplate.queryForObject(
                "SELECT COUNT(*) FROM information_schema.tables WHERE table_name = 'news'", 
                Integer.class) > 0;
                
            if (!tableExists) {
                log.info("news表不存在，跳过修改");
                return;
            }
            
            // 简单执行ALTER语句修改content字段为可为空
            jdbcTemplate.execute("ALTER TABLE news MODIFY COLUMN content TEXT NULL");
            log.info("成功修改news表的content字段为可为空");
            
        } catch (Exception e) {
            log.error("修改news表的content字段失败", e);
        }
    }

    /**
     * 执行指定的SQL脚本 - 此方法已被禁用，避免SQL注入问题
     *
     * @param scriptPath 脚本路径（相对于resources目录）
     */
    private void executeSqlScript(String scriptPath) {
        log.info("SQL脚本执行已被禁用，请使用其他方式修改数据库结构");
        // 方法实现已被移除，避免SQL注入问题
    }
} 